﻿#ifndef _TIMER_H_
#define _TIMER_H_

#include <stdbool.h>
#include "net_err.h"
#include "debug.h"
#include "nlist.h"

#define NET_TIMER_RELOAD 1

struct _net_timer_t;

typedef void (*timer_proc_t)(struct _net_timer_t *timer, void *arg);

// 定时器类型结构
typedef struct _net_timer_t
{
    char name[TIMER_NAME_SIZE];
    bool is_added;     // 定时器是否被加入到链表中
    int flags;         // 定时器是否需要周期性触发
    int curr;          // 定时器当前剩余时间
    int reload;        // 定时器重新加载设置的时间
    nlist_node_t node; // 通过链表来存储定时器
    timer_proc_t proc; // 定时器到期后调用的函数
    void *arg;         // 定时器到期后调用函数时需要传入的参数
} net_timer_t;

net_err_t timer_init();
net_err_t timer_add(net_timer_t *timer, const char *name, timer_proc_t proc, void *arg, int ms, bool flags);
net_err_t timer_remove(net_timer_t *timer);
net_err_t timer_check_tmo(int dff_ms);
int timer_first_tmo();

#endif